package net.hekka.canyoutalk.data.executor;

import java.sql.Connection;
import java.sql.SQLException;
import net.hekka.canyoutalk.data.store.TempLogTableSqlStore;
import net.hekka.canyoutalk.data.vo.TempLogTableVo;
import net.hekka.canyoutalk.share.database.SqlExecutor;

/**
 * tempLogTable 테이블에 관련된 SQL 실행에 대한 클래스이다.
 * @author Jeffrey Ha
 */
public class TempLogTableSqlExecutor extends SqlExecutor {

    /**
     * tempLogTable 테이블에 새로운 컨텐츠를 insert한다.
     * @param dbConnection 데이터베이스 Connection
     * @param tempLogTableVo 임시 로그 테이블("temp_log_table")의 속성을 관리하는 ValueObject
     * @return 입력된 갯수
     * @throws SQLException SQL 작업중 오류 발생 시
     */
    public int insertTempLogTable(Connection dbConnection, TempLogTableVo tempLogTableVo) throws SQLException {
        int count = 0;
        try {
            //set Database connection
            setDbConnection(dbConnection);
            //set DatabaseType
            setDatabaseType();
            //get sql statement
            String sql = TempLogTableSqlStore.getTempLogTableInsertSql(getDatabaseType());
            //set preparedstatement
            setPreparedStatement(sql);
            //set parameter of statement
            setContentStageInsertParameter(tempLogTableVo);
            //execute Sql
            count = getPreparedStatement().executeUpdate();
        } finally {
            try {
                if (getPreparedStatement() != null) {
                    getPreparedStatement().close();
                }
            } catch (Exception ex) {
            }
        }
        return count;
    }

    private void setContentStageInsertParameter(TempLogTableVo tempLogTableVo) throws SQLException {
        int sequence = 1;

        // 나의 전화번호
        this.setStringPreparedStatement(sequence++, tempLogTableVo.getMyNumber());
        // 상대방 전화번호
        this.setStringPreparedStatement(sequence++, tempLogTableVo.getYourNumber());
        // 커멘드
        this.setStringPreparedStatement(sequence++, tempLogTableVo.getCommand());
        // 상태
        this.setStringPreparedStatement(sequence++, tempLogTableVo.getStatus());
        // 체크 번호
        this.setStringPreparedStatement(sequence++, tempLogTableVo.getCheckNumber());
        // 패킷 데이터
        this.setStringPreparedStatement(sequence++, tempLogTableVo.getPacketData());
        // BUSY 상태인 시간(분)
        this.setLongPreparedStatement(sequence++, tempLogTableVo.getBusyMinute());
        // LINK 순번
        this.setIntPreparedStatement(sequence++, tempLogTableVo.getLinkSequence());
    }

}
